package cn.meng.base.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


/**
 * 死信队列配置类，依旧采用Direct模式 ： 邮件、公共号 二者过期的消息 分别通过不同的 routingKey 去到不同的死信队列处理，所以采用Direct模式
 * @author 万梦辉
 */
@Configuration
public class DeadRabbitMqConfig {

    /**
     * 声明fanout交换机   交换机的名称为：dead_direct_exchange
     * @return
     */
    @Bean
    public DirectExchange deadDirectExchange (){
        return new DirectExchange("dead_direct_exchange");
    }

    /**
     * 声明一个死信队列（邮件使用）
     * @return
     */
    @Bean
    public Queue emailDeadQueue () {
        return new Queue("dead.direct.email.queue",true);
    }

    /**
     * 声明一个死信队列（微信公共号使用）
     * @return
     */
    @Bean
    public Queue weChatDeadQueue () {
        return new Queue("dead.direct.weChat.queue",true);
    }

    /**
     * 绑定交互机与队列
     * @return
     */
    @Bean
    public Binding emailDeadBinding() {
        return BindingBuilder.bind(emailDeadQueue()).to(deadDirectExchange()).with("emailDead");
    }

    /**
     * 绑定交互机与队列
     * @return
     */
    @Bean
    public Binding weChatDeadBinding() {
        return BindingBuilder.bind(weChatDeadQueue()).to(deadDirectExchange()).with("weChatDead");
    }

}
